package com.x.Part6_内部类.Test;

/**
 * ClassName: interfaceTest
 * Package: IntelliJ IDEA
 * Description:
 * Written by HanXu
 * Create 2024.03.07 17:55
 */

public class interfaceTest {
    public static void main(String[] args) {

        //1、接口方法调用的正常方式
        Person p1 = new Person();
        p1.method();

        //2、Skill p2实际上new的是Skill的匿名实现类的对象
        Skill p2 = new Skill(){
            @Override
            public void method() {
                System.out.println("Skill的匿名实现类中重写的方法执行了");
            }
        };
        p2.method();


        //3、用Skill的匿名实现类的匿名对象调用Skill的匿名实现类中重写的方法
        new Skill(){
            @Override
            public void method() {
                System.out.println("Skill的匿名实现类中重写的方法执行了，调用该方法的是匿名实现类的匿名对象");
            }
        }.method();

        //4、继承抽象类的子类的重写方法
        SubAA s1 = new SubAA();
        s1.method1();

        //5、new一个抽象类的匿名子类的有名对象
        AA aa = new AA() {
            @Override
            public void method1() {

            }
        };
        aa.method1();

        //6、new一个抽象类的匿名子类的匿名对象，直接调用
        new AA(){
            @Override
            public void method1() {

            }
        }.method1();


    }
}

interface Skill{
    public abstract void method();
}

class Person implements Skill{
    @Override
    public void method() {
        System.out.println("Class中重写Skill接口的方法执行了");
    }
}

abstract class AA{
    public abstract void method1();
}

class SubAA extends AA{
    @Override
    public void method1() {

    }
}